home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / doom / axxwar_1.zip / SOURCES / TEAMPLAY.QC < prev    next >
Text File  |  1997-03-08  |  20KB  |  944 lines

  1. // AxxWars 0.8
  2.  
  3. float checktime;
  4.  
  5. float assigned_team;
  6. string color_team;
  7. string team_name;
  8. float skin_team;
  9.  
  10.  
  11. //prototypes
  12. void() ActivateFlag;
  13. void() SelectTeam;
  14.  
  15.  
  16. /*
  17. ==============
  18. GiveQuakePower
  19. ==============
  20. */
  21. void (entity temp_ent) GiveQuakePower = 
  22.     {
  23.     temp_ent.items = temp_ent.items | IT_QUAD;
  24.     temp_ent.super_time = 1;
  25.     temp_ent.super_damage_finished = time + 1000;
  26.     };
  27.  
  28. /*
  29. ================
  30. RemoveQuakePower
  31. ================
  32. */
  33. void (entity temp_ent) RemoveQuakePower = 
  34.     {
  35.     temp_ent.items = temp_ent.items - (temp_ent.items & IT_QUAD);
  36.     temp_ent.super_damage_finished = 0;
  37.     temp_ent.super_time = 0;
  38.     };
  39.  
  40. /*
  41. ======
  42. MakeIt
  43. ======
  44. */
  45. void (entity ent) MakeIt = 
  46.     {
  47.     local string s;
  48.     if (teamplay == 6) 
  49.         GiveQuakePower(ent);
  50.     if(teamplay==4) 
  51.         {
  52.         if (!(ent.flags & FL_AM_IT))  
  53.             centerprint(ent,"You're IT!\n");
  54.         ent.items=ent.items | IT_KEY1;
  55.         ent.items=ent.items - (ent.items & IT_KEY2);
  56.         ent.effects=ent.effects | EF_DIMLIGHT;
  57.         ent.prev_skin=ent.skin;
  58.         ent.skin = 10;
  59.         ent.skin_temp = ent.skin;
  60.         SkinName(ent.skin);
  61.         stuffcmd(ent,"COLOR 4 ");
  62.         s=ftos(ent.team - 1);
  63.         stuffcmd(ent,s);
  64.         stuffcmd(ent,"\n");
  65.         } 
  66.     else if ((teamplay==5) || (teamplay==6)) 
  67.         {
  68.         if (!(ent.flags & FL_AM_IT)) 
  69.             centerprint(ent,"You're TI!\n");
  70.         ent.items=ent.items | IT_KEY2;
  71.         ent.items=ent.items - (ent.items & IT_KEY1);
  72.         ent.effects=ent.effects | EF_DIMLIGHT;
  73.         ent.prev_skin=ent.skin;
  74.         ent.skin = 10;
  75.         ent.skin_temp = ent.skin;
  76.         SkinName(ent.skin);
  77.         stuffcmd(ent,"COLOR 4 ");
  78.         s=ftos(ent.team - 1);
  79.         stuffcmd(ent,s);
  80.         stuffcmd(ent,"\n");
  81.         }
  82.     ent.flags=ent.flags | FL_AM_IT;
  83.     };
  84.  
  85. /*
  86. =========
  87. MakeNotIt
  88. =========
  89. */
  90. void (entity ent) MakeNotIt = 
  91.     {
  92.     local string s;
  93.     if (teamplay == 6) 
  94.         RemoveQuakePower(ent);
  95.     if(teamplay==4) 
  96.         {
  97.         if (!(ent.flags & FL_AM_IT)) 
  98.             centerprint(ent,"You're not IT anymore!\n");
  99.         ent.items=ent.items - (ent.items & IT_KEY1);
  100.         ent.items=ent.items - (ent.items & IT_KEY2);
  101.         ent.skin=ent.prev_skin;
  102.         ent.skin_temp = ent.skin;
  103.         SkinName(ent.skin);
  104.         stuffcmd(ent,"COLOR 2 ");
  105.         s=ftos(ent.team - 1);
  106.         stuffcmd(ent,s);
  107.         stuffcmd(ent,"\n");
  108.         } 
  109.     else if((teamplay==5)||(teamplay==6)) 
  110.         {
  111.         if (!(ent.flags & FL_AM_IT)) 
  112.             centerprint(ent,"You're not TI anymore!\n");
  113.         ent.items=ent.items - (ent.items & IT_KEY1);
  114.         ent.items=ent.items - (ent.items & IT_KEY2);
  115.         ent.skin=ent.prev_skin;
  116.         ent.skin_temp = ent.skin;
  117.         SkinName(ent.skin);
  118.         stuffcmd(ent,"COLOR 2 ");
  119.         s=ftos(ent.team - 1);
  120.         stuffcmd(ent,s);
  121.         stuffcmd(ent,"\n");
  122.     }
  123.     ent.flags=ent.flags-(ent.flags & FL_AM_IT);
  124.     ent.effects=ent.effects-(ent.effects * EF_DIMLIGHT);
  125. };
  126.  
  127. /*
  128. ===================
  129. RemoveFlagsAndBases
  130. ===================
  131. */
  132. void() RemoveFlagsAndBases = 
  133.     {
  134.     local entity head;
  135.     head=find(world,classname,"base");
  136.     while(head)
  137.         {
  138.         remove(head);
  139.         head=find(world,classname,"base");
  140.         }
  141.     head=find(world,classname,"flag");
  142.     while(head)
  143.         {
  144.         remove(head);
  145.         head=find(world,classname,"flag");
  146.         }
  147.     world_flag=3;
  148. };
  149.  
  150. /*
  151. ==========
  152. RemoveHill
  153. ==========
  154. */
  155. void() RemoveHill = {
  156.     local entity head;
  157.     head=find(world,classname,"hill");
  158.     while(head){
  159.         remove(head);
  160.         head=find(world,classname,"hill");
  161.     }
  162.     world_hill=0;
  163. };
  164.  
  165. /*
  166. ===================
  167. CheckTeamPlayChange
  168. ===================
  169. */
  170. void() CheckTeamPlayChange = 
  171.     {
  172.     local entity head;
  173.     if(teamplay!=oldteamplay)
  174.         {
  175.         head=find(world,classname,"player");        
  176.             while(head)
  177.                 {
  178.                 head.team = 0;
  179.                 head.flaginv=0;
  180.                 head=find(head,classname,"player");
  181.                 }    
  182.         {
  183.         if (oldteamplay==6)
  184.             {
  185.             head=find(world,classname,"player");        
  186.             while(head)
  187.                 {
  188.                 RemoveQuakePower(head);
  189.                 head=find(head,classname,"player");        
  190.                 }
  191.             }
  192.         if (oldteamplay==7)
  193.             {
  194.             head=find(world,classname,"player");        
  195.             while(head)
  196.                 {
  197.                 head.items=head.items-(head.items & IT_KEY1); 
  198.                 head.items=head.items-(head.items & IT_KEY2); 
  199.                 head.flaginv=0;
  200.                 head.team = 0;
  201.                 head=find(head,classname,"player");        
  202.                 }
  203.             }
  204.         }
  205.         if(teamplay==0) 
  206.             bprint("No Teams Mode\n");
  207.         else if(teamplay==1) 
  208.             bprint("Normal Team Mode\n");
  209.         else if(teamplay==2) 
  210.             bprint("Damage Team Mode\n");
  211.         else if(teamplay==4) 
  212.             bprint("IT Mode\n");
  213.         else if(teamplay==5) 
  214.             bprint("TI Mode\n");
  215.         else if(teamplay==6) 
  216.             bprint("Quake-TI Mode\n");
  217.         else if(teamplay==7) 
  218.             bprint("Capture the Flag Mode\n");
  219.         else if(teamplay==8) 
  220.             bprint("King of the Hill Mode\n");
  221.         oldteamplay=teamplay;
  222.         self.impulse=17; // remove flags/bases/hills
  223.     }
  224. };
  225.  
  226. /*
  227. =========
  228. HillThink
  229. =========
  230. */
  231. void() HillThink = {
  232.     local entity head;
  233.     head=findradius(self.origin,200);
  234.     while(head){
  235.         if((head.classname=="player") && (head.health > 0) && (!(head.flags & FL_OBSERVER))) {
  236.             sound(head,CHAN_BODY,"misc/talk.wav",0.1,ATTN_NORM);
  237.             head.frags=head.frags+0.1;
  238.         }
  239.         head=head.chain;
  240.     }
  241.     self.nextthink=time+1;
  242.     if (!world_hill) remove(self);
  243. };
  244.  
  245. /*
  246. =========
  247. PlaceHill
  248. =========
  249. */
  250. void() PlaceHill = 
  251.     {
  252.     local entity hill;  
  253.     if(!world_hill)
  254.         {
  255.         bprint(self.netname);
  256.         bprint(" placed the Hill\n");
  257.         world_hill=1;
  258.         hill=spawn();
  259.         setmodel(hill,"progs/flag.mdl");
  260.         hill.classname="hill";
  261.         setorigin(hill,self.origin);
  262.         hill.movetype = MOVETYPE_TOSS;
  263.         hill.solid = SOLID_NOT;
  264.         hill.think = HillThink;
  265.         hill.nextthink = time + 0.1;
  266.         setsize (hill, VEC_ORIGIN, VEC_ORIGIN);           
  267.         hill.effects = hill.effects | EF_DIMLIGHT;
  268.         }
  269. };
  270.  
  271. /*
  272. =========
  273. CheckBase
  274. =========
  275. */
  276. void() CheckBase = 
  277.     {
  278.     local entity newflag;
  279.     local entity oldbase,entity;
  280.     local float flag_color;
  281.  
  282.     self.think = CheckBase;
  283.     self.nextthink = time + 1;
  284.     if (world_flag & self.items) remove(self);
  285.     else if (self.watertype < -3) 
  286.         {
  287.         flag_color = self.items;
  288.         if (flag_color == FLAG_1)
  289.             bprint ("dragon ");
  290.         if (flag_color == FLAG_2)
  291.             bprint ("wing ");
  292.         bprint("Base unreachable. Removing."); 
  293.         world_flag=world_flag+self.items;
  294.         remove(self);
  295.     }
  296. };
  297.  
  298. /*
  299. =========
  300. CheckFlag
  301. =========
  302. */
  303. void() CheckFlag = 
  304.     {
  305.     local entity newflag;
  306.     local entity oldbase,entity;
  307.     local float flag_color;
  308.  
  309.     self.think = CheckFlag;
  310.     self.nextthink = time + 1;
  311.     if (world_flag & self.items) 
  312.         {
  313.         remove(self);
  314.         }
  315.     else if (self.watertype < -3) 
  316.         {
  317.         flag_color = self.items;
  318.         if (flag_color == FLAG_1)
  319.             bprint ("dragon ");
  320.         if (flag_color == FLAG_2)
  321.             bprint ("wing ");
  322.         bprint("flag unreachable. Respawning."); 
  323.         remove(self);
  324.         
  325.         oldbase = world;
  326.         while (oldbase.items != flag_color)
  327.             oldbase = find(oldbase,classname,"base");
  328.                 
  329.         newflag = spawn();
  330.         newflag.owner = oldbase;
  331.         newflag.movetype = MOVETYPE_NONE;
  332.         newflag.solid = SOLID_NOT;
  333.         newflag.items = flag_color;
  334.         newflag.classname = "flag";
  335.         newflag.think = ActivateFlag;
  336.         newflag.nextthink = time + 0.5;
  337.         setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);           
  338.         setorigin (newflag, oldbase.origin);
  339.         newflag.pos1 = newflag.origin;
  340.         newflag.velocity = VEC_ORIGIN;
  341.         setmodel(newflag,"progs/flag.mdl");
  342.         if (flag_color == FLAG_1)
  343.             newflag.skin = 0;
  344.         else
  345.             newflag.skin = 1;
  346.     }
  347. };
  348.  
  349. /*
  350. ================
  351. ReturnFlagToBase
  352. ================
  353. */
  354. void(entity who,float flag_color) ReturnFlagToBase = 
  355.     {
  356.     local entity newflag;
  357.     local float team_color,flag_color;
  358.     local entity head;
  359.     team_color=who.team;
  360.     sound (who, CHAN_WEAPON, "items/flagcap.wav", 1, ATTN_NORM);
  361.     newflag = spawn();
  362.     newflag.owner = self;
  363.     newflag.movetype = MOVETYPE_NONE;
  364.     newflag.solid = SOLID_NOT;
  365.     newflag.items = flag_color;
  366.     newflag.classname = "flag";
  367.     newflag.think = ActivateFlag;
  368.     newflag.nextthink = time + 0.1;
  369.     setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);           
  370.     head = world;
  371.     while(head.items != flag_color)
  372.         head = find(head,classname,"base");
  373.     setorigin (newflag, head.origin);
  374.     newflag.pos1 = newflag.origin;
  375.     newflag.velocity = VEC_ORIGIN;
  376.     setmodel(newflag,"progs/flag.mdl");
  377.         if (flag_color == FLAG_1)
  378.             newflag.skin = 0;
  379.         else
  380.             newflag.skin = 1;
  381.     who.flaginv=who.flaginv-flag_color;
  382.     if (who.team==flag_color) 
  383.         who.flagtime=0;
  384. };
  385.  
  386. /*                    
  387. ==========
  388. PickupFlag
  389. ==========
  390. */
  391. void() PickupFlag = 
  392.     {
  393.     local float team_color;
  394.     local float flag_color;
  395.     local entity newflag;
  396.     local entity oldbase;
  397.  
  398.     if (world_flag) 
  399.         return;
  400.     if (other == world) 
  401.         return;
  402.     if (other.classname != "player") 
  403.         return;
  404.     flag_color = self.items;
  405.     team_color = other.team;
  406.     if ((team_color != 1) && (team_color != 2))
  407.         {
  408.         centerprint(other,"Join a clan first: Impulse 20\n");
  409.         return;
  410.         }
  411.     if ((flag_color == team_color) && (self.origin_x == self.pos1_x) && (self.origin_y == self.pos1_y))
  412.         {
  413.         // You cannot take your flag from your base
  414.         return;
  415.         }
  416.     bprint(other.netname);
  417.     bprint(" picked up the ");
  418.     if (flag_color == FLAG_1) 
  419.         {
  420.         bprint("dragon flag.\n");
  421.         sound (self, CHAN_WEAPON, "items/flag1get.wav", 1, ATTN_NORM);
  422.         }
  423.     if (flag_color == FLAG_2) 
  424.         {
  425.         bprint("wing flag.\n");
  426.         sound (self, CHAN_WEAPON, "items/flag2get.wav", 1, ATTN_NORM);
  427.         }
  428.     if (flag_color == team_color) 
  429.         {        
  430.         other.flagtime = time + 30;
  431.         }
  432.     other.flaginv = other.flaginv + flag_color;
  433.     remove(self);
  434. };
  435.  
  436. /*
  437. ============
  438. ActivateFlag
  439. ============
  440. */
  441. void() ActivateFlag =
  442. {
  443.     local entity newflag;    
  444.     local entity oldbase;
  445.     local float flag_color;
  446.     
  447.     self.owner = self;
  448.     self.movetype = MOVETYPE_TOSS;
  449.     self.solid = SOLID_TRIGGER;
  450.     self.touch = PickupFlag;
  451.     self.think = CheckFlag;
  452.     self.effects = self.effects | EF_DIMLIGHT;
  453.     self.nextthink = time + 5;
  454.     if (world_flag) 
  455.         {
  456.         self.pos1 = self.origin;        
  457.         }
  458. };
  459.  
  460. /*
  461. =========
  462. Touchbase
  463. =========
  464. */
  465. void() TouchBase = {
  466.     local float team_color;
  467.     local float base_color;
  468.     local entity oldbase,head;
  469.     local entity newflag;    
  470.  
  471.     if (other == world) 
  472.         return;
  473.     if (other.classname != "player") 
  474.         return;
  475.     if(other.flaginv==0) 
  476.         return;
  477.     base_color = self.items;
  478.     team_color = other.team;
  479.     if (team_color > 2) {
  480.         centerprint(other,"Select a Team by using Impulse 20\n");
  481.         return;
  482.         }
  483.     if (team_color == base_color) {
  484.         if (other.flaginv & base_color) {
  485.                 bprint(other.netname);
  486.                 bprint(" returns the flag to his base\n");
  487.                 ReturnFlagToBase(other,base_color);
  488.             }       
  489.         if (other.flaginv & (FLAG_BOTH - team_color)) {        
  490. //    Give the team scores
  491.             bprint(other.netname);
  492.             bprint(" secures ");
  493.             if (team_color == FLAG_1)
  494.                 bprint("lightning flag.\n");
  495.             if (team_color == FLAG_2)
  496.                 bprint("hammer flag.\n");
  497.                   other.frags = other.frags + 5;
  498.             head = find(world,classname,"player");
  499.             while(head){
  500.                 if (head.team==team_color)
  501.                     head.frags=head.frags+5;
  502.                 head = find(head,classname,"player");
  503.             }
  504.             ReturnFlagToBase(other,(FLAG_BOTH - team_color));
  505.         }
  506.     }
  507. };
  508.  
  509. /*
  510. ============
  511. ActivateBase
  512. ============
  513. */
  514. void() ActivateBase =
  515. {
  516.     local entity found;
  517.  
  518.     self.owner = self;
  519.     self.movetype = MOVETYPE_TOSS;
  520.     self.solid = SOLID_TRIGGER;
  521.     self.touch = TouchBase;
  522.     self.think = CheckBase;
  523.     self.nextthink = time+1;
  524.     if (world_flag == 0)
  525.     {
  526.         bprint("Flags placed. Let the Games begin!\n");
  527.         return;
  528.     }
  529. };
  530.  
  531. /*
  532. =========
  533. PlaceBase
  534. =========
  535. */
  536. void (float flag_color) PlaceBase =    
  537. {
  538.     local entity newbase;
  539.  
  540.     newbase = spawn();
  541.     newbase.owner = self;
  542.     newbase.movetype = MOVETYPE_NONE;
  543.     newbase.solid = SOLID_NOT;
  544.     newbase.items = flag_color;
  545.     newbase.classname = "base";
  546.     newbase.think = ActivateBase;
  547.     newbase.nextthink = time + 1;
  548.     setsize (newbase, VEC_ORIGIN, VEC_ORIGIN);           
  549.     setorigin (newbase, self.origin + '0 0 3');
  550.     newbase.velocity = VEC_ORIGIN;
  551.     if (flag_color == 1) setmodel(newbase,"progs/pole.mdl");
  552.     else setmodel(newbase,"progs/pole.mdl");
  553.     world_flag = world_flag - flag_color;
  554. };
  555.  
  556. /*
  557. ========
  558. DropFlag
  559. ========
  560. */
  561. void(float flag_color) DropFlag = {
  562.     local entity newflag;
  563.     newflag = spawn();
  564.     newflag.owner = self;
  565.     newflag.movetype = MOVETYPE_NONE;
  566.     newflag.solid = SOLID_NOT;
  567.     newflag.items = flag_color;
  568.     newflag.classname = "flag";
  569.     newflag.think = ActivateFlag;
  570.     newflag.nextthink = time + 1;
  571.     setsize (newflag, VEC_ORIGIN, VEC_ORIGIN);           
  572.     setorigin (newflag, self.origin);
  573.     newflag.velocity_x = 250*random();
  574.     newflag.velocity_y = 250*random();
  575.     setmodel(newflag,"progs/flag.mdl");
  576.     if (flag_color == FLAG_1)
  577.         newflag.skin = 0;
  578.     else
  579.         newflag.skin = 1;    
  580.     self.attack_finished = time + 1;
  581.     self.flaginv=self.flaginv-flag_color;
  582. };
  583.  
  584. /*
  585. =============
  586. DropFlagCheck
  587. =============
  588. */
  589. void(float both) DropFlagCheck = {
  590.     local float flag_color;
  591.     local entity newflag;
  592.     if (teamplay != 7) 
  593.         {
  594.         return;
  595.         }
  596.     flag_color=self.flaginv;
  597.     if (flag_color == 3) 
  598.         {
  599.         // you have both flags drop just yours.
  600.         // FIX maybe drop just opponents.  not sure.
  601.         if (both)
  602.             {
  603.             DropFlag(FLAG_1);
  604.             DropFlag(FLAG_2);
  605.             } 
  606.         else 
  607.             {
  608.             flag_color=self.team;
  609.             DropFlag(flag_color);
  610.             }
  611.         } 
  612.     else if (flag_color > 0)
  613.         {
  614.         DropFlag(flag_color);
  615.         } 
  616.     if (flag_color & self.team) 
  617.         self.flagtime=0;
  618. };
  619.  
  620. /*
  621. ===========
  622. W_PlaceFlag
  623. ===========
  624. */
  625. void() W_PlaceFlag =
  626. {    
  627.     if (world_flag == 0)
  628.         {
  629.         bprint("Both Flags already placed.\n");
  630.         return;
  631.         }
  632.     if (self.team == 1) 
  633.         {
  634.         if (world_flag & FLAG_1)
  635.             {
  636.             bprint("Dragon flag placed by ");
  637.             bprint(self.netname);
  638.             bprint("\n");
  639.             PlaceBase(FLAG_1);
  640.             ReturnFlagToBase(self,FLAG_1);
  641.             return;
  642.             }
  643.         else
  644.             {
  645.             centerprint(self,"Dragon flag already dropped\n");
  646.             return;
  647.             }
  648.         }
  649.     if (self.team == 2)
  650.         {
  651.         if (world_flag & FLAG_2)
  652.             {
  653.             bprint("Wing flag placed by ");
  654.             bprint(self.netname);
  655.             bprint("\n");
  656.             PlaceBase(FLAG_2);
  657.             ReturnFlagToBase(self,FLAG_2);
  658.             return;
  659.             }
  660.         else
  661.             {           
  662.             centerprint(self,"Wing flag already dropped\n");
  663.             return;
  664.             }
  665.         }
  666.     else
  667.         {
  668.         centerprint(self,"First use Impulse 20 to select a team.\n");
  669.         return;
  670.         }
  671. };
  672.  
  673. /*
  674. ==============
  675. CheckTeamRules
  676. ==============
  677. */
  678. void (entity targ, entity attacker, float makeit) CheckTeamRules= 
  679. {
  680.     local entity temp_ent,head;
  681.     local float dist;
  682.  
  683.     if ((teamplay == 7) && targ.flaginv) 
  684.         {
  685.         bprint(targ.netname);
  686.         bprint(" died carrying ");
  687.         if (targ.flaginv == FLAG_BOTH) 
  688.             bprint("Both flags.\n");
  689.         else if (targ.flaginv == FLAG_1) 
  690.             bprint("dragon flag.\n");
  691.         else if (targ.flaginv == FLAG_2)
  692.             bprint("wings flag.\n");
  693.         temp_ent = self;
  694.         self = targ;
  695.         DropFlagCheck(TRUE);
  696.         self = temp_ent;
  697.         }
  698.  
  699. // make closest player TI upon death
  700. if ((attacker.classname != "player") || (attacker == targ))
  701.     {
  702.     if(((teamplay!=5) && (teamplay!=6)) && (!makeit)) 
  703.         return;
  704.     dist=100;
  705.     while(!head && (dist < 4000))
  706.         {
  707.         head=findradius(targ.origin,dist);
  708.         while(head)
  709.             {
  710.             if((head.classname=="player") &&(head!=targ)&&(dist<4000))
  711.                 {
  712.                 MakeNotIt(targ);
  713.                 MakeIt(head);
  714.                 dist=4000;
  715.             } 
  716.             head=head.chain;
  717.         }    
  718.         dist=dist+100;
  719.     }
  720.     return;
  721. // only non its can frag
  722. if(teamplay == 4) {
  723.     if (attacker.flags & FL_AM_IT) {
  724.         MakeIt(targ);
  725.         MakeNotIt(attacker);
  726.         attacker.frags=attacker.frags - 1;
  727.     } else {
  728.         if (targ.flags & FL_AM_IT)
  729.         attacker.frags = attacker.frags + 2;
  730.         }
  731.     }
  732.  
  733. //ti gets 3 frags for killing 
  734. if(teamplay == 5) {
  735.     if (!(attacker.flags & FL_AM_IT)) {
  736.         if (targ.flags & FL_AM_IT) {
  737.             MakeIt(attacker);
  738.             MakeNotIt(targ);
  739.         }
  740.     } else {
  741.         // give three frags if kill he killed a non-ti
  742.         if (!(targ.flags & FL_AM_IT)) {
  743.             attacker.frags = attacker.frags + 2;
  744.         } else {
  745.             MakeIt(attacker);
  746.             MakeNotIt(targ);
  747.         }
  748.     }
  749. }
  750.  
  751. if(teamplay == 6) {
  752.     if (!(attacker.flags & FL_AM_IT)) 
  753.         {
  754.         if (targ.flags & FL_AM_IT) 
  755.             {
  756.             MakeIt(attacker);
  757.             MakeNotIt(targ);
  758.             attacker.frags = attacker.frags + 2;
  759.             }
  760.         } 
  761.         else if (targ.flags & FL_AM_IT) 
  762.         {
  763.             MakeIt(attacker);
  764.             MakeNotIt(targ);
  765.         }
  766.     }
  767. };
  768.  
  769. /*
  770. =============
  771. CheckTeamPlay
  772. =============
  773. */
  774. void() CheckTeamPlay = {
  775.     local float found_it;
  776.     local entity head;
  777.     if (teamplay > 3 && teamplay < 9) 
  778.         {
  779.         if (teamplay == 7) 
  780.             {
  781.             if ((self.team != 1) && (self.team != 2))
  782.                 SelectTeam();
  783.             if (self.team == 1)
  784.                 {
  785.                 if  (((world_flag == 0) && (self.flaginv & FLAG_1)) || (world_flag & FLAG_1))  
  786.                     {
  787.                     self.items = self.items | IT_KEY1;
  788.                     self.flaginv = self.flaginv | FLAG_1;
  789.                     self.effects = self.effects | EF_DIMLIGHT;
  790.                     } 
  791.                 else 
  792.                     self.items = self.items - (self.items & IT_KEY1);
  793.                 }
  794.             if (self.team == 2)
  795.                 {
  796.                 if (((world_flag == 0) && (self.flaginv & FLAG_2)) || (world_flag & FLAG_2)) 
  797.                     {
  798.                     self.items = self.items | IT_KEY2;
  799.                     self.flaginv = self.flaginv | FLAG_2;
  800.                     self.effects = self.effects | EF_DIMLIGHT;
  801.                     }
  802.                 else 
  803.                     self.items = self.items - (self.items & IT_KEY2);
  804.                 }
  805.             if ((self.flagtime < time) && self.flagtime) 
  806.                 {
  807.                 bprint(self.netname);
  808.                 bprint("'s flag returned to his base\n");
  809.                 ReturnFlagToBase(self,self.team);    
  810.                 }
  811.             } 
  812.         if (checktime > time) 
  813.             return;
  814.         if((teamplay >3) && (teamplay < 7))
  815.             {
  816.             head=find(world,classname,"player");
  817.             while(head)
  818.                 {
  819.                 if (head.flags & FL_AM_IT) 
  820.                     {
  821.                     found_it=TRUE;
  822.                     MakeIt(head);
  823.                     } 
  824.                 else 
  825.                     {
  826.                     MakeNotIt(head);
  827.                     }
  828.                 head=find(head,classname,"player");
  829.             }
  830.             if ((!found_it))
  831.                 {
  832.                 MakeIt(self);
  833.                 }
  834.         }
  835.     }
  836.     checktime=time + 5;
  837. };
  838.  
  839. /*
  840. ===============
  841. LightFindTarget
  842. ===============
  843. */
  844. entity() LightFindTarget = {  
  845.     local entity head, selected;
  846.     local float dist;
  847.     dist = 100000;
  848.     selected = world;
  849.     head = findradius(self.origin, 100000);
  850.     while(head) 
  851.         { 
  852.         if ((((coop) && (head.classname != "player")) || (!coop)) &&
  853.         (((teamplay==1 || teamplay==2 || teamplay==7) &&
  854.         (head.team != self.owner.team)) || (teamplay!=1 || teamplay!=7)) && 
  855.         ((head.health > 1) && (head != self) && (head != self.owner)) &&
  856.         (!(head.items & IT_INVISIBILITY ))) 
  857.             {
  858.             traceline(self.origin,head.origin,TRUE,self);
  859.             if ((trace_fraction==1) && (vlen(head.origin-self.origin) < dist)) 
  860.                 {
  861.                 selected = head;
  862.                 dist = vlen(head.origin - self.origin);
  863.                 }
  864.             }    
  865.         head = head.chain;
  866.         }
  867.     return selected;
  868. };
  869.  
  870. /*
  871. ==========
  872. SelectTeam
  873. ==========
  874. */
  875. void() SelectTeam = 
  876.     {
  877.  
  878.     if ((teamplay != 1) && (teamplay != 2) && (teamplay != 7))       
  879.         return;
  880.     local float team1;
  881.     local float team2;
  882.     
  883.     if (self.team == 0) 
  884.         {
  885.         // Get player count for each team.
  886.         team1 = team2 = 0;
  887.         other = find (world, classname, "player");
  888.         while (other != world)
  889.             {
  890.             if (other.team == 1)
  891.                 team1 = team1 + 1;
  892.             else if (other.team == 2)
  893.                 team2 = team2 + 1;
  894.             other = find (other, classname, "player");
  895.             }
  896.                 
  897.         if (team1 <= team2)
  898.             {
  899.                 self.team = 1;
  900.                 stuffcmd(self, "color 0 0\n");
  901.                 self.skin = 11;
  902.                 team_name = "Dragon";    
  903.             }
  904.         else
  905.             {    self.team = 2;
  906.                 stuffcmd(self, "color 1 1\n");
  907.                 self.skin = 12;
  908.                 team_name = "Wings";
  909.             }
  910.  
  911.         sprint(self, "You have been assigned to the ");
  912.         sprint(self, team_name);
  913.         sprint(self, " team.\n");
  914.         return;    
  915.         
  916.         }
  917.     else 
  918.         if (self.admin != 3)
  919.             {
  920.             centerprint (self, "You're already part of a team!");
  921.             return;
  922.             }
  923.         if (self.team == 2)
  924.             {
  925.                 self.team = 1;
  926.                 stuffcmd(self, "color 0 0\n");
  927.                 self.skin = 11;
  928.                 team_name = "Dragon";
  929.             }
  930.         else
  931.             {    self.team = 2;
  932.                 stuffcmd(self, "color 1 1\n");
  933.                 self.skin = 12;
  934.                 team_name = "Wings";
  935.             }
  936.         sprint(self, "You have been reassigned to the ");
  937.         sprint(self, team_name);
  938.         sprint(self, " team.\n");
  939.  
  940.         
  941.     };
  942.  
  943.